package com.example.hello.service;

import com.example.hello.common.PageResult;
import com.example.hello.entity.Dept;
import com.example.hello.mapper.DeptMapper;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
public class DeptService {

    @Autowired
    private DeptMapper deptMapper;

    /**
     * 查询部门列表，支持分页和名称过滤
     * @param name 部门名称（模糊匹配）
     * @param page 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    public PageResult<Dept> getDeptList(String name, Integer page, Integer pageSize) {
        try {
            // 判断是否需要分页查询
            if (page != null && pageSize != null) {
                log.info("分页查询部门列表: name={}, page={}, pageSize={}", name, page, pageSize);
                PageHelper.startPage(page, pageSize);
                Page<Dept> deptPage = (Page<Dept>) deptMapper.selectDeptList(name);
                return new PageResult<>(deptPage.getTotal(), deptPage.getResult());
            } else {
                log.info("查询全部部门列表: name={}", name);
                List<Dept> deptList = deptMapper.selectDeptList(name);
                return new PageResult<>((long) deptList.size(), deptList);
            }
        } catch (Exception e) {
            log.error("查询部门列表失败", e);
            throw e;
        }
    }
    
    /**
     * 根据ID查询部门
     * @param id 部门ID
     * @return 部门信息
     */
    public Dept getDeptById(Integer id) {
        return deptMapper.selectById(id);
    }
    
    /**
     * 新增部门
     * @param dept 部门信息
     * @return 是否成功
     */
    @Transactional
    public boolean addDept(Dept dept) {
        // 设置更新时间
        dept.setUpdateTime(LocalDateTime.now());
        return deptMapper.insert(dept) > 0;
    }
    
    /**
     * 更新部门信息
     * @param dept 部门信息
     * @return 是否成功
     */
    @Transactional
    public boolean updateDept(Dept dept) {
        // 验证部门是否存在
        Dept existingDept = deptMapper.selectById(dept.getId());
        if (existingDept == null) {
            return false;
        }
        
        // 设置更新时间
        dept.setUpdateTime(LocalDateTime.now());
        
        // 如果没有提供名称，使用原名称
        if (dept.getName() == null || dept.getName().isEmpty()) {
            dept.setName(existingDept.getName());
        }
        
        return deptMapper.update(dept) > 0;
    }
    
    /**
     * 删除部门
     * @param id 部门ID
     * @return 删除结果
     */
    @Transactional
    public boolean deleteDept(Integer id) {
        return deptMapper.deleteById(id) > 0;
    }
} 